﻿#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)

////数据结构(Data Structure)
////计算机存储、组织数据的方式，指相互之间存在一种或多种特定关系的数据元素的集合
//
////算法
////定义良好的计算过程。一系列的计算步骤，用来将输入数据转化成输出结果
//
////复杂度 - 时间和空间
////衡量一个算法的好坏
////摩尔定律，主要关注时间
////
////时间复杂度，算法中的基本操作的执行次数
////循环时间复杂度的计算
//void Func1(int N)
//{
//	int count = 0;
//	for (int i = 0; i < N; i++)
//	{
//		for (int j = 0; j < N; j++)
//		{
//			++count;
//		}
//	}
//
//	for (int k = 0; k < 2 * N; k++)
//	{
//		++count;
//	}
//
//	int M = 10;
//	while (M--)
//	{
//		++count;
//	}
//
//	printf("%d\n", count);
//}
////F(N) = N*N + 2*N + 10
////估算，大O的渐进表示法
////时间复杂度：O(N^2)
//
////计算Func2的时间复杂度？
//void Func2(int N)
//{
//	int count = 0;
//	for (int k = 0; k < 2 * N; k++)
//	{
//		++count;
//	}
//
//	int M = 10;
//	while (M--)
//	{
//		++count;
//	}
//
//	printf("%d\n", count);
//}
////O(N)
//
////悲观预期，看最坏的情况
//
////二分查找的时间复杂度 - O(log₂N)
////查找之前要排序
//
////斐波那契数列递归时间复杂度 - O(2^N)
////空间复杂度O(N)
//
////空间复杂度
////临时额外占用存储空间大小的量度
//
//int missingNumber(int* nums, int numsSize)
//{
//	int x = 0;
//	// 跟[0, n]异或
//	for (int i = 0; i <= numsSize; i++)
//	{
//		x ^= i;
//	}
//
//	// 再跟数组中值异或
//	for (int i = 0; i < numsSize; i++)
//	{
//		x ^= nums[i];
//	}
//
//	return x;
//}
//
//void Reverse(int* nums, int left, int right)
//{
//	while (left < right)
//	{
//		int tmp = nums[left];
//		nums[left] = nums[right];
//		nums[right] = nums[left];
//
//		++left;
//		--right;
//	}
//}
//
//void rotate(int* nums, int numsSize, int k)
//{
//	if (k >= numsSize)
//	{
//		k %= numsSize;
//	}
//
//	// 前n-k个数逆置
//	Reverse(nums, 0, numsSize - k - 1);
//	// 后k个数逆置
//	Reverse(nums, numsSize - k, numsSize - 1);
//	// 整体逆置
//	Reverse(nums, 0, numsSize - 1);
//}